home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 January: Mac OS SDK / Dev.CD Jan 96 SDK / Dev.CD Jan 96 SDK1.toast / Development Kits (Disc 1) / AOCE / Development Tools / Sample Code / Interprogram Messaging Manager / IPM MessageBoard / queues.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-23  |  1.8 KB  |  97 lines  |  [TEXT/MPS ]

  1. /*
  2.     Generic Queue Management Code
  3.     Steve Falkenburg, MacDTS, Apple Computer
  4.     3/11/92
  5.     
  6. */
  7.  
  8. #ifndef __OSUTILS__
  9. #include <OSUtils.h>
  10. #endif
  11.  
  12. #include "const.h"
  13. #include "globals.h"
  14. #include "utils.h"
  15. #include "queues.h"
  16.  
  17. static    QHdr        gFreeQueue,gCompletedQueue;        // our queue header structures
  18. static    MyQElem        gBufferPool[kNumQBuffers];        // queue storage area is here
  19. static    long        gFree,gRunning,gCompleted,gServiced;    // queue stats
  20.  
  21. /* initializes our queue handling scheme */
  22.  
  23. void InitQueues(void)
  24. {
  25.     short i;
  26.     
  27.     gFreeQueue.qFlags = 0;
  28.     gFreeQueue.qHead = 0;
  29.     gFreeQueue.qTail = 0;
  30.     
  31.     gCompletedQueue.qFlags = 0;
  32.     gCompletedQueue.qHead = 0;
  33.     gCompletedQueue.qTail = 0;
  34.     
  35.     gFree = kNumQBuffers;
  36.     gRunning = gCompleted = 0;
  37.     gServiced = 0;
  38.     
  39.     for (i=0; i<kNumQBuffers; i++)
  40.         Enqueue((QElemPtr)&gBufferPool[i],&gFreeQueue);
  41. }
  42.  
  43.  
  44. /* pulls a parameter block off of the unused queue to be used in a device manager call
  45. */
  46.  
  47. MyQElemPtr GetUnusedQBlock(void)
  48. {
  49.     MyQElemPtr retValue;
  50.     
  51.     retValue = (MyQElemPtr) gFreeQueue.qHead;
  52.     if (retValue) {
  53.         Dequeue((QElemPtr)retValue,&gFreeQueue);
  54.         gFree--;
  55.     }
  56.     
  57.     return retValue;
  58. }
  59.  
  60.  
  61. /*    puts a parameter block back onto the unused queue to be picked up and used by someone else
  62. */
  63.  
  64. void RecycleFreeQBlock(MyQElemPtr qBlock)
  65. {
  66.     Enqueue((QElemPtr)qBlock,&gFreeQueue);
  67.     gFree++;
  68. }
  69.  
  70.  
  71. /*    pulls a parameter block off of the completed queue for processing by the caller
  72. */
  73.  
  74. MyQElemPtr GetCompletedQBlock(void)
  75. {
  76.     MyQElemPtr retValue;
  77.     
  78.     retValue = (MyQElemPtr) gCompletedQueue.qHead;
  79.     if (retValue) {
  80.         Dequeue((QElemPtr)retValue,&gCompletedQueue);
  81.         gCompleted--;
  82.     }
  83.     
  84.     return retValue;
  85. }
  86.  
  87.  
  88. /*    queues a parameter block onto the completed queue.  this is normally called from completion
  89.     routines at interrupt time.
  90. */
  91.  
  92. void StoreCompletedQBlock(MyQElemPtr qBlock)
  93. {
  94.     Enqueue((QElemPtr)qBlock,&gCompletedQueue);
  95.     gCompleted++;
  96. }
  97.